package date0702pm;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.time.LocalDate;

public class JdbcTest11 {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {

		String driverClassName = "com.mysql.cj.jdbc.Driver";
		// 对于 MySQL 来说需要设置 useServerPrepStmts 和 cachePrepStmts
		String params = "?serverTimezone=Asia/Shanghai&useSSL=false&useServerPrepStmts=true&cachePrepStmts=true";
		String url = "jdbc:mysql://localhost:3306/ecut" + params;
		String user = "ecuter";
		String password = "ecuter";

		// 1、加载驱动
		Class.forName(driverClassName);

		// 2、获得连接
		Connection connection = DriverManager.getConnection(url, user, password);

		// 参数占位符只能应用在 DML 和 DQL 语句中
		String SQL = "INSERT INTO t_students ( id , name , gender , birthdate ) VALUES ( ? , ? , ? , ? )";

		// 3、获得 PreparedStatement对象
		// 3.1、将 带有 参数占位符 的 SQL 语句发送给数据库服务器
		//                  < < < < < 数据库服务器: 接受SQL、解析SQL、编译SQL、缓存编译后的指令、返回相应指令的标识符
		// 3.2、根据数据库服务器返回的 标识符 创建一个包含了该标识符的 PreparedStatement 对象
		PreparedStatement ps = connection.prepareStatement(SQL);
		System.out.println(ps);

		// 4、设置 参数占位符 的值
		ps.setInt(1, 101);
		ps.setString(2, "张翠山");
		ps.setString(3, "男");
		LocalDate birthdate = LocalDate.of(2000, 10, 30);
		java.sql.Date date = java.sql.Date.valueOf(birthdate);
		ps.setDate(4, date); // setDate( int index , java.sql.Date date )

		// 5、"执行"SQL : 将标识符和参数值发送给数据库服务器、获取数据库服务器的返回结果
		int count = ps.executeUpdate(); // 注意这里的方法不要再传入 SQL 语句
		System.out.println(count);

		// 4、设置 参数占位符 的值
		ps.setInt(1, 102);
		ps.setString(2, "殷素素");
		ps.setString(3, "女");
		ps.setDate(4, date); // setDate( int index , java.sql.Date date )

		// 5、"执行"SQL : 将标识符和参数值发送给数据库服务器、获取数据库服务器的返回结果
		count = ps.executeUpdate(); // 注意这里的方法不要再传入 SQL 语句
		System.out.println(count);

		// 6、释放资源
		connection.close();

	}

}
